import requests
import re
import pymysql
import time


url = "https://movie.douban.com/chart"

headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
req = requests.get(url,headers = headers)

# r.encoding  # 获取当前的编码
# r.encoding = 'utf-8'  # 设置编码
# r.text  # 以encoding解析返回内容。字符串方式的响应体，会自动根据响应头部的字符编码进行解码。
# r.content  # 以字节形式（二进制）返回。字节方式的响应体，会自动为你解码 gzip 和 deflate 压缩。
# r.headers  # 以字典对象存储服务器响应头，但是这个字典比较特殊，字典键不区分大小写，若键不存在则返回None
# r.status\_code  # 响应状态码
# r.raw  # 返回原始响应体，也就是 urllib 的 response 对象，使用 r.raw.read()
# r.ok  # 查看r.ok的布尔值便可以知道是否登陆成功
# # \*特殊方法\*#
# r.json()  # Requests中内置的JSON解码器，以json形式返回,前提返回的内容确保是json格式的，不然解析出错会抛异常
# r.
# raise\_for\_status()  # 失败请求(非200响应)抛出异常
req.encoding = 'utf-8'

# print(req.text)

#匹配（）  [(]  [)]
obj = re.compile(r'<tr class="item">.*?<img src="(?P<url>.*?)" width="75".*?<a href=".*?class="">(?P<title>.*?)/ <span style="font-size:13px;">'
                 r'.*?<span class="rating_nums">(?P<score>.*?)</span>.*?<span class="pl">[(](?P<num>.*?)人评价[)]</span>',re.S) #re.S可以匹配换行符

result = obj.finditer(req.text)
conn = pymysql.connect(host="127.0.0.1", user="root", password="root", database="python", charset="utf8mb4",port=3306)
cursor = conn.cursor()

formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")

for item in result:
    dic = item.groupdict() #用于返回一个包含所有命名子组的字典，其中键是组名，值是对应的匹配结果
    dic['title'] = dic['title'].strip() #用于移除字符串头尾指定的字符
    dic['addtime'] = formatted_time
    print(dic)

    # 插入数据
    columns = ', '.join(dic.keys())
    values = ', '.join(['%s'] * len(dic))
    sql = 'INSERT INTO movie ({}) VALUES ({})'.format(columns, values)

    try:
        cursor.execute(sql, tuple(dic.values()))
        conn.commit()
        print("Data inserted successfully")
    except pymysql.MySQLError as e:
        print("Error: ", e)
    # 关闭cursor和连接
    # cursor.close()
    # conn.close()
